package com.smart.community.property.entity;

import java.time.LocalDateTime;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.smart.community.commons.base.BaseEntity;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * 维修工单实体类
 * 
 * 严格按照《Java后端SpringBoot代码开发规范.md》Entity规范实现：
 * - 继承BaseEntity：获得标准字段（id、createTime、updateTime、createBy、updateBy、version、deleted）
 * - 功能单一原则：Entity类必须是单纯的数据库字段映射的Bean对象，功能必须单一
 * - 禁止枚举类：所有枚举字段都使用String类型存储，避免使用枚举类
 * - 禁止工具方法：只保留基本的getter/setter方法，禁止添加工具方法
 * - 完整注释：所有字段都有完整的JavaDoc注释
 * - 字段映射：使用@TableField注解正确映射数据库字段
 * 
 * @author Wu.Liang
 * @since 2024-12-21
 * @version 3.0.0 - 根据新Entity规范调整
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sc_repair_order")
public class RepairOrder extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 工单编号
     */
    @TableField("order_no")
    private String orderNo;

    /**
     * 工单标题
     */
    @TableField("title")
    private String title;

    /**
     * 工单描述
     */
    @TableField("description")
    private String description;

    /**
     * 用户ID
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 居民ID
     */
    @TableField("resident_id")
    private Long residentId;

    /**
     * 社区ID
     */
    @TableField("community_id")
    private Long communityId;

    /**
     * 维修类型（使用Integer类型存储）
     */
    @TableField("repair_type")
    private Integer repairType;

    /**
     * 优先级（使用Integer类型存储）
     */
    @TableField("priority")
    private Integer priority;

    /**
     * 紧急程度（使用Integer类型存储）
     */
    @TableField("urgency_level")
    private Integer urgencyLevel;

    /**
     * 工单状态（使用Integer类型存储）
     */
    @TableField("status")
    private Integer status;

    /**
     * 维修地点
     */
    @TableField("location")
    private String location;

    /**
     * 维修图片信息，JSON格式存储多个文件信息
     */
    @TableField("repair_images")
    private String repairImages;

    /**
     * 维修地址
     */
    @TableField("repair_address")
    private String repairAddress;

    /**
     * 联系电话
     */
    @TableField("contact_phone")
    private String contactPhone;

    /**
     * 分配给维修人员ID
     */
    @TableField("assign_to")
    private Long assignTo;

    /**
     * 分配时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("assign_time")
    private LocalDateTime assignTime;

    /**
     * 完成时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("complete_time")
    private LocalDateTime completeTime;

    /**
     * 满意度评分：1-5分
     */
    @TableField("satisfaction")
    private Integer satisfaction;

    // 只包含基本的getter/setter方法，不包含任何工具方法
}
